/*
 * @lc app=leetcode.cn id=1175 lang=typescript
 *
 * [1175] 质数排列
 */

// @lc code=start

function numPrimeArrangements(n: number): number {
    let MOD = 10 ** 9 + 7;

    function isPrime(x: number) {
        if (x === 0 || x === 1) return false;
        for (let i = 2; i * i <= x; i++) {
            if (x % i === 0) return false;
        }
        return true;
    }

    // 计算质数个数
    let prime = 0;
    for (let i = 1; i <= n; i++) {
        if (isPrime(i)) prime++;
    }

    let res = 1;
    const Counter = (x: number) => {
        for (let i = x; i >= 1; i--) {
            res %= MOD;
            res *= i;
        }
    };

    //! 这道题目有毛病，如果两个部分相乘，那么就回导致 mod 的时候有偏差。。。
    Counter(prime);
    Counter(n - prime);
    return res;
}
// @lc code=end
